Давайте изменим наш сервер. Сделаем еще одну кнопку для посылки этого сообщения. По нажатию на кнопку, пока будем посылать просто сообщение без параметров.
void CServerDlg::OnButton2()
{
HWND hwnd;
hwnd=::FindWindow(NULL,"Client");
if (hwnd != NULL)
{
::SendMessage(hwnd,WM_COPYDATA ,0,0);
}
}
Теперь клиент должен научиться принимать это сообщение. А здесь нам может
помочь Class Wizard, он уже умеет создавать процедуру приема данного
сообщения. Нажмите правую кнопку на CClientDlg и выберите пункт меню
Add Windows Message Handles.

В результате появится вот такая функция. MessageBeep вписал уже я для того, чтобы почувствовать сообщение :-)))
BOOL CClientDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{
MessageBeep(-1);
return CDialog::OnCopyData(pWnd, pCopyDataStruct);
}
Уже сейчас можно запустить и проверить, что данный механизм работает. Ну
что теперь надо идти на сервер и готовить данные к отправке. Пошли !!
Изменяем код отправки сообщения.
void CServerDlg::OnButton2()
{
HWND hwnd;
hwnd=::FindWindow(NULL,"Client");
COPYDATASTRUCT cd;
char buffer[25];
strcpy(buffer,"Hello Client");
cd.lpData=&buffer;
cd.cbData= sizeof(buffer);
if (hwnd != NULL)
{
::SendMessage(hwnd,WM_COPYDATA, 0, (LPARAM) &cd);
}
}
Как видите нам нужно заполнить структуру COPYDATASTRUCT, указав
адрес буфера и размер. После чего адрес структуры передать в сообшение.
Теперь нужно изменить клиента.
BOOL CClientDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCD)
{
MessageBeep(-1);
char buffer[25];
strcpy(buffer,(char *)pCD->lpData);
AfxMessageBox(buffer);
return CDialog::OnCopyData(pWnd, pCD);
}
То же просто. Копируем строку из буфера и выводим на экран в виде
сообщения. Ниже приведена картина неизвесного автора - "Программа в разгар
тестирования"
